<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    发布订阅者模式又称观察者模式。
    他定义对象间的一种一对多的依赖关系 当一个对象的状态发生改变时 所有依赖于它的对象都将得到通知
    在JavaScript开发者 我们一般用事件模型来替代传统的发布订阅者模式

</body>
    <script>
        // 如果我们曾经在dom节点绑定过事件函数 那么我们就曾经使用过 发布订阅者模式
        document.body.addEventListener('click', function() {
            // alert(2)
            console.log(2);
        })
        document.body.click();
        
        // 如何一步步实现 发布订阅者模式
        // 1 指定谁来充当发布者 （比如售楼处）
        // 2 给发布者添加一个缓存列表 用于存放 回调函数以便通知订阅者 （售楼处的花名册）
        // 3 最后发布消息的时候 发布者会遍历这个缓存列表 依次触发里面存放的订阅者回调函数（挨个发短信）
        // 另外 我们还可以往回调函数里面添加一些参数 订阅者可以接收这些参数 这是很有必要的 比如售楼处可以在发给订阅者的短信里面加入房子的单价 等其他信息
        var salesOffices = {};  // 定义一个售楼处
        salesOffices.clientList = [];        // 缓存列表 存放订阅者的回调函数
        salesOffices.listen = function(fn ) {   // 增加订阅者
            this.clientList.push(fn)
        }
        salesOffices.trigger = function () {
            
        }



    </script>
</html>